home *** CD-ROM | disk | FTP | other *** search
/ Dr. Windows 3 / dr win3.zip / dr win3 / UTILITY1 / MSWLGO35.ZIP / EXAMPLES / ALGS next >
Text File  |  1993-04-11  |  7KB  |  273 lines

  1. ;
  2. ; This appears to be a grabbag of assorted log algorythms
  3. ;
  4. TO ACOUNT :ARRAY
  5. OUTPUT COUNT :ARRAY
  6. END
  7.  
  8. TO ADDCHILD :TREE :CHILD
  9. MAKE :TREE LPUT :CHILD THING :TREE
  10. END
  11.  
  12. TO ADECK
  13. LOCAL [RANKS SUITS]
  14. MAKE "RANKS LISTTOARRAY [A 2 3 4 5 6 7 8 9 10 J Q K]
  15. MAKE "SUITS LISTTOARRAY [H S D C]
  16. MAKE "DECK ARRAY 52
  17. MAKE "INDEX 0
  18. FOR [J 0 3] ~
  19.     [FOR [I 0 12] ~
  20.          [PARRAY :DECK :INDEX WORD (GARRAY :RANKS :I) (GARRAY :SUITS :J) ~
  21.           MAKE "INDEX :INDEX+1]]
  22. END
  23.  
  24. TO AEQUALP :ARRAY1 :ARRAY2
  25. OP EQUALP :ARRAY1 :ARRAY2
  26. END
  27.  
  28. TO GARRAY :ARRAY :INDEX
  29. OP ITEM :INDEX+1 :ARRAY
  30. END
  31.  
  32. TO PARRAY :ARRAY :INDEX :VALUE
  33. SETITEM :INDEX+1 :ARRAY :VALUE
  34. END
  35.  
  36. TO AREACODE :PAIR
  37. OUTPUT FIRST :PAIR
  38. END
  39.  
  40. TO ASHUFFLE
  41. ADECK
  42. FOR [I 51 1] [ASHUFFLE1 :I (RANDOM :I+1) (GARRAY :DECK :I)]
  43. END
  44.  
  45. TO ASHUFFLE1 :I :J :OLDI
  46. PARRAY :DECK :I (GARRAY :DECK :J)
  47. PARRAY :DECK :J :OLDI
  48. END
  49.  
  50. TO BALANCE :LIST
  51. IF EMPTYP :LIST [OUTPUT []]
  52. IF EMPTYP BF :LIST [OUTPUT LEAF FIRST :LIST]
  53. OUTPUT BALANCE1 (INT (COUNT :LIST)/2) :LIST []
  54. END
  55.  
  56. TO BALANCE1 :COUNT :IN :OUT
  57. IF EQUALP :COUNT 0 ~
  58.    [OUTPUT TREE (FIRST :IN) (LIST BALANCE REVERSE :OUT BALANCE BF :IN)]
  59. OUTPUT BALANCE1 (:COUNT-1) (BF :IN) (FPUT FIRST :IN :OUT)
  60. END
  61.  
  62. TO CHILDREN :NODE
  63. OUTPUT BUTFIRST THING :NODE
  64. END
  65.  
  66. TO CITIES :NAME
  67. OUTPUT CITIES1 FINDDATUM :NAME :WORLD
  68. END
  69.  
  70. TO CITIES1 :SUBTREE
  71. IF LEAFP :SUBTREE [OUTPUT (LIST DATUM :SUBTREE)]
  72. OUTPUT MAP.SE [CITIES1 ?] CHILDREN :SUBTREE
  73. END
  74.  
  75. TO CITY :PAIR
  76. OUTPUT BUTFIRST :PAIR
  77. END
  78.  
  79. TO DATUM :NODE
  80. OUTPUT FIRST THING :NODE
  81. END
  82.  
  83. TO FINDDATUM :NAME :TREE
  84. IF EQUALP :NAME DATUM :TREE [OUTPUT :TREE]
  85. OUTPUT TRANSFER [NOT EMPTYP ?OUT] [FINDDATUM :NAME ?IN] CHILDREN :TREE
  86. END
  87.  
  88. TO HIGHBRANCH :TREE
  89. IF LEAFP :TREE [OUTPUT []]
  90. OUTPUT LAST CHILDREN :TREE
  91. END
  92.  
  93. TO HOWMANY
  94. PRINT :COMPARISONS
  95. ERN "COMPARISONS
  96. END
  97.  
  98. TO LDECK
  99. OUTPUT CROSSMAP [WORD :1 :2] [[A 2 3 4 5 6 7 8 9 10 J Q K] [H S D C]]
  100. END
  101.  
  102. TO LEAF :DATUM
  103. OUTPUT TREE :DATUM []
  104. END
  105.  
  106. TO LEAFP :NODE
  107. OUTPUT EMPTYP CHILDREN :NODE
  108. END
  109.  
  110. TO LEAVES :LEAVES
  111. OUTPUT MAP [LEAF ?] :LEAVES
  112. END
  113.  
  114. TO LESSTHANP :A :B
  115. IF NOT NAMEP "COMPARISONS [MAKE "COMPARISONS 0]
  116. MAKE "COMPARISONS :COMPARISONS+1
  117. OUTPUT :A < :B
  118. END
  119.  
  120. TO LISTCITY :CODE
  121. OUTPUT CITY FIND [EQUALP :CODE AREACODE ?] :CODELIST
  122. END
  123.  
  124. TO LOCATE :CITY
  125. OUTPUT LOCATE1 :CITY :WORLD
  126. END
  127.  
  128. TO LOCATE1 :CITY :SUBTREE
  129. LOCAL "RESULT
  130. IF LEAFP :SUBTREE [OUTPUT IFELSE EQUALP :CITY DATUM :SUBTREE [(LIST :CITY)] [[]]]
  131. MAKE "RESULT TRANSFER [NOT EMPTYP ?OUT] [LOCATE1 :CITY ?IN] CHILDREN :SUBTREE
  132. IF EMPTYP :RESULT [OUTPUT []]
  133. OUTPUT FPUT (DATUM :SUBTREE) :RESULT
  134. END
  135.  
  136. TO LOWBRANCH :TREE
  137. IF LEAFP :TREE [OUTPUT []]
  138. OUTPUT FIRST CHILDREN :TREE
  139. END
  140.  
  141. TO LSHUFFLE :DECK
  142. IF EMPTYP :DECK [OUTPUT []]
  143. LOCAL "INDEX
  144. MAKE "INDEX 1+RANDOM COUNT :DECK
  145. OUTPUT FPUT (ITEM :INDEX :DECK) (LSHUFFLE (REMOVEITEM :INDEX :DECK))
  146. END
  147.  
  148. TO NEXTROW :COMBS
  149. IF EMPTYP BF :COMBS [OUTPUT :COMBS]
  150. OUTPUT FPUT (SUM FIRST :COMBS FIRST BF :COMBS) NEXTROW BF :COMBS
  151. END
  152.  
  153. TO PSORT :LIST
  154. LOCAL "SPLIT
  155. IF (COUNT :LIST) < 2 [OUTPUT :LIST]
  156. MAKE "SPLIT (SUM FIRST :LIST LAST :LIST)/2
  157. IF LESSTHANP FIRST :LIST :SPLIT ~
  158.    [OUTPUT PSORT1 :SPLIT (BF :LIST) (LIST FIRST :LIST) []]
  159. OUTPUT PSORT1 :SPLIT (BL :LIST) (LIST LAST :LIST) []
  160. END
  161.  
  162. TO PSORT1 :SPLIT :IN :LOW :HIGH
  163. IF EMPTYP :IN [OUTPUT SE PSORT :LOW PSORT :HIGH]
  164. IF LESSTHANP FIRST :IN :SPLIT ~
  165.    [OUTPUT PSORT1 :SPLIT (BF :IN) (FPUT FIRST :IN :LOW) :HIGH]
  166. OUTPUT PSORT1 :SPLIT (BF :IN) :LOW (FPUT FIRST :IN :HIGH)
  167. END
  168.  
  169. TO QUADRATIC :A :B :C
  170. LOCAL [ROOT X1 X2]
  171. MAKE "ROOT SQRT (:B * :B-4 * :A * :C)
  172. MAKE "X1 (-:B+:ROOT)/(2 * :A)
  173. MAKE "X2 (-:B-:ROOT)/(2 * :A)
  174. PRINT (SE [THE SOLUTIONS ARE] :X1 "AND :X2)
  175. END
  176.  
  177. TO REALT :N :K
  178. IF EQUALP :K 0 [OUTPUT 1]
  179. IF EQUALP :N 0 [OUTPUT 0]
  180. OUTPUT (T :N :K-1) + (T :N-1 :K)
  181. END
  182.  
  183. TO REMOVEITEM :NUMBER :LIST
  184. IF EQUALP :NUMBER 1 [OUTPUT BF :LIST]
  185. OUTPUT FPUT (FIRST :LIST) (REMOVEITEM :NUMBER-1 BF :LIST)
  186. END
  187.  
  188. TO SIMPLEX :BUTTONS
  189. OUTPUT 2 * FIRST CASCADE.2 :BUTTONS ~
  190.                            [FPUT (SUMPRODS BF ?2 ?1) ?1] [1] ~
  191.                            [FPUT 1 NEXTROW ?2] [1 1]
  192. END
  193.  
  194. TO SSORT :LIST
  195. IF (COUNT :LIST) < 2 [OUTPUT :LIST]
  196. OUTPUT SSORT1 (FIRST :LIST) (BF :LIST) []
  197. END
  198.  
  199. TO SSORT1 :MIN :IN :OUT
  200. IF EMPTYP :IN [OUTPUT FPUT :MIN SSORT :OUT]
  201. IF LESSTHANP :MIN (FIRST :IN) [OP SSORT1 :MIN (BF :IN) (FPUT FIRST :IN :OUT)]
  202. OUTPUT SSORT1 (FIRST :IN) (BF :IN) (FPUT :MIN :OUT)
  203. END
  204.  
  205. TO SUMPRODS :A :B
  206. IF EMPTYP :A [OUTPUT 0]
  207. OUTPUT SUM (PRODUCT FIRST :A FIRST :B) (SUMPRODS BF :A BF :B)
  208. END
  209.  
  210. TO T :N :K
  211. LOCAL "RESULT
  212. MAKE "RESULT GPROP (WORD "N :N) (WORD "K :K)
  213. IF NOT EMPTYP :RESULT [OUTPUT :RESULT]
  214. MAKE "RESULT REALT :N :K
  215. PPROP (WORD "N :N) (WORD "K :K) :RESULT
  216. OUTPUT :RESULT
  217. END
  218.  
  219. TO TREE :DATUM :CHILDREN
  220. LOCAL "NODE
  221. MAKE "NODE GENSYM
  222. MAKE :NODE FPUT :DATUM :CHILDREN
  223. OUTPUT :NODE
  224. END
  225.  
  226. TO TREECITY :CODE
  227. OUTPUT CITY TREECITY1 :CODE :CODETREE
  228. END
  229.  
  230. TO TREECITY1 :CODE :TREE
  231. LOCAL "DATUM
  232. IF EMPTYP :TREE [OUTPUT [0 NO CITY]]
  233. MAKE "DATUM DATUM :TREE
  234. IF :CODE = AREACODE :DATUM [OUTPUT :DATUM]
  235. IF :CODE < AREACODE :DATUM [OUTPUT TREECITY1 :CODE LOWBRANCH :TREE]
  236. OUTPUT TREECITY1 :CODE HIGHBRANCH :TREE
  237. END
  238.  
  239. TO WORLDTREE
  240. MAKE "WORLD TREE "WORLD ~
  241.                  (LIST (TREE "FRANCE LEAVES [PARIS DIJON AVIGNON]) ~
  242.                        (TREE "CHINA LEAVES [BEIJING NANKING SHANGHAI CANTON]) ~
  243.                        (TREE [UNITED STATES] ~
  244.                              (LIST (TREE [NEW YORK] ~
  245.                                           LEAVES [[NEW YORK] ALBANY ~
  246.                                                   ROCHESTER ARMONK]) ~
  247.                                    (TREE "MASSACHUSETTS ~
  248.                                          LEAVES [BOSTON CAMBRIDGE ~
  249.                                                  SUDBURY MAYNARD]) ~
  250.                                    (TREE "CALIFORNIA ~
  251.                                          LEAVES [[SAN FRANCISCO] BERKELEY ~
  252.                                                  [PALO ALTO] PASADENA]) ~
  253.                                    (TREE "WASHINGTON ~
  254.                                          LEAVES [SEATTLE OLYMPIA]))) ~
  255.                        (TREE "CANADA ~
  256.                              (LIST (TREE "ONTARIO ~
  257.                                          LEAVES [TORONTO OTTAWA WINDSOR]) ~
  258.                                    (TREE "QUEBEC ~
  259.                                          LEAVES [MONTREAL QUEBEC LACHINE]) ~
  260.                                    (TREE "MANITOBA LEAVES [WINNIPEG]))))
  261. END
  262.  
  263.  
  264. MAKE "CODELIST [[202 WASHINGTON] [206 SEATTLE] [212 NEW YORK] [213 LOS ANGELES] ~
  265.                 [215 PHILADELPHIA] [303 DENVER] [305 MIAMI] [313 DETROIT] ~
  266.                 [314 ST. LOUIS] [401 PROVIDENCE] [404 ATLANTA] [408 SUNNYVALE] ~
  267.                 [414 MILWAUKEE] [415 SAN FRANCISCO] [504 NEW ORLEANS] ~
  268.                 [608 MADISON] [612 ST. PAUL] [613 KINGSTON] [614 COLUMBUS] ~
  269.                 [615 NASHVILLE] [617 BOSTON] [702 LAS VEGAS] [704 CHARLOTTE] ~
  270.                 [712 SIOUX CITY] [714 ANAHEIM] [716 ROCHESTER] [717 SCRANTON] ~
  271.                 [801 SALT LAKE CITY] [804 NEWPORT NEWS] [805 VENTURA] ~
  272.                 [808 HONOLULU]]
  273.